www.gusucode.com > matlab从零到进阶程序与数据 > matlab从零到进阶程序与数据/第12章 常微分方程(组)数值求解/examp12_4_4.m
function examp12_4_4 function v = ddex3hist(t) %历史函数 v = [ log(t); 1./t]; end function d = ddex3delay(t,y) %延迟函数 d = exp(1 - y(2)); end function dydt = ddex3de(t,y,Z) %延迟微分方程函数.由于只有一个延迟项,因此Z为1列的向量,y2(exp(1-y2(t)))延迟 %了exp(1-y2(t)),而y2又是第二个状态变量,因此y2(exp(1-y2(t)))用Z(2)来表示 dydt = [ y(2); -Z(2)*y(2)^2*exp(1 - y(2))]; end t0 = 0.1; tfinal = 5; tspan = [t0, tfinal];%求解时间范围 sol = ddesd(@ddex3de,@ddex3delay,@ddex3hist,tspan); %准确解 texact = linspace(t0,tfinal); yexact = ddex3hist(texact); %以下画图呈现结果 figure; plot(sol.x,sol.y(1,:),'o','markersize',7); hold on plot(sol.x,sol.y(2,:),'*','markersize',7); plot(texact,yexact(1,:),'k-','linewidth',2); plot(texact,yexact(2,:),'k:','linewidth',2); %图例,位置自动选择最佳位置 L = legend('{\ity}_1,ddesd','{\ity}_2,ddesd','{\ity}_1,解析解',... '{\ity}_2,解析解','Location','best'); set(L,'fontname','Times New Roman'); hold off xlabel('\fontname{隶书}时间t','fontsize',16); ylabel('\fontname{隶书}y的解','fontsize',16); title('ddesd求解和解析解对比图'); end